package com.atguigu.gmall.product.service;

import com.atguigu.gmall.model.product.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * projectName: gmall
 *
 * @author: 陈鹏
 * time: 2022/9/25 16:08 星期日
 * description: 提供给商品详情微服务内部调用的接口类
 */

public interface ItemService {

    /**
     * 根据skuId查询sku信息
     * @param skuId
     * @return
     */
    public SkuInfo getSkuInfo(Long skuId);

    /**
     * 根据skuId查询skuInfo信息 (加入了redis缓存)
     * @param skuId
     * @return
     */
    public SkuInfo getSkuInfoByRedisOrMysql(Long skuId);

    /**
     * 根据category3Id查询分类信息
     * @param category3Id
     * @return
     */
    public BaseCategoryView getBaseCategory(Long category3Id);

    /**
     * 根据skuId查询sku图片列表
     * @param skuId
     * @return
     */
    public List<SkuImage> getImageList(Long skuId);

    /**
     * 根据skuId查询价格
     * @param skuId
     * @return
     */
    public BigDecimal getPrice(Long skuId);

    /**
     * 根据sku和spu的id查询销售属性和值以及标识出当前的sku的值是哪些
     * @param skuId
     * @param spuId
     * @return
     */
    public List<SpuSaleAttr> getSpuSaleAttr(@Param("skuId") Long skuId,
                                            @Param("spuId") Long spuId);

    /**
     * 根据spuId查询所有的销售属性和销售值
     * @param spuId
     * @return
     */
    public Map selectSkuValuesList(Long spuId);

    /**
     * 根据Id查询品牌详情
     * @param id
     * @return
     */
    public BaseTrademark getBaseTrademark(Long id);

    /**
     * 根据skuId查询sku的平台属性
     * @param skuId
     * @return
     */
    public List<BaseAttrInfo> getBaseAttrInfo(Long skuId);

    /**
     * 扣减库存
     * @param decountMap
     */
    public void decount(Map<String, Object> decountMap);

    /**
     * 回滚库存
     * @param rollBackMap
     * @return
     */
    public void rollback(Map<String,Object> rollBackMap);
}
